package com.java.create;

/**
 * 实现Runnable接口创建线程
 * 1、实现Runnable接口并重写run()
 * 2、实例化Runnable实现类并传递给Thread类
 * 3、实例化Thread类并start()启动线程
 */
public class RunnableCreate {
    static class RunnableSon implements Runnable {
        @Override
        public void run() {
            System.out.println("线程(" + Thread.currentThread().getName() + ")开始");

            for (int i = 0; i < 5; i++) {
                System.out.println("线程(" + Thread.currentThread().getName() + ")运行中");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            System.out.println("线程(" + Thread.currentThread().getName() + ")结束");
        }
    }

    public static void main(String[] args) {
        System.out.println("主线程开始");

        RunnableSon runnableSon1 = new RunnableSon();
        new Thread(runnableSon1).start();

        RunnableSon runnableSon2 = new RunnableSon();
        new Thread(runnableSon2).start();

        for (int i = 0; i < 5; i++) {
            System.out.println("主线程运行中");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("主线程结束");
    }

    /**
     * 输出结果如下，每次运行的结果不同！但"主线程开始"一定在最开始
     * 主线程开始
     * 主线程运行中
     * 线程(Thread-1)开始
     * 线程(Thread-1)运行中
     * 线程(Thread-0)开始
     * 线程(Thread-0)运行中
     * 线程(Thread-1)运行中
     * 主线程运行中
     * 线程(Thread-0)运行中
     * 线程(Thread-0)运行中
     * 主线程运行中
     * 线程(Thread-1)运行中
     * 线程(Thread-1)运行中
     * 线程(Thread-0)运行中
     * 主线程运行中
     * 线程(Thread-1)运行中
     * 线程(Thread-0)运行中
     * 主线程运行中
     * 主线程结束
     * 线程(Thread-1)结束
     * 线程(Thread-0)结束
     */
}
